﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using DAL;
using BLL;

public partial class admin_Students_ListStudents : System.Web.UI.Page
{
    StudentBLL data = new StudentBLL();
    ClassBLL classData = new ClassBLL();
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            Session["url_back_admin"] = Request.RawUrl;

            LoadCombo();
            if (Request.QueryString["Id"] != null)
            {
                Filldata();
            }

        }
        if (Request.QueryString["Id"] != null)
        {
            dropParent.Enabled = false;
            dropClass.Enabled = false;
        }
    }

    private void LoadCombo()
    {
        LoadCategory();
        LoadCategoryDM();
        LoadComboBrith();
    }
    private void Filldata()
    {
        int id = Convert.ToInt32(Request.QueryString["Id"]);
        Student studentCurrent = data.GetById(id);
        int classid = studentCurrent.ClassId;
        ClassBLL dataclas= new ClassBLL();
        int cateclassid= dataclas.GetById(classid).CateClassId;
        ShowChildDS(cateclassid, "--");
        dropParent.SelectedValue = cateclassid.ToString();
        dropClass.SelectedValue = classid.ToString();
        txtAddress.Text = studentCurrent.Address;
        txtCMND.Text = studentCurrent.CMND;
        txtFirstName.Text = studentCurrent.FirstName;
        txtLastName.Text = studentCurrent.LastName;
        txtPhone.Text = studentCurrent.Phone;
        dropClass.SelectedValue = studentCurrent.ClassId.ToString();
        if (Convert.ToBoolean(studentCurrent.isEnable)) radioEnable.Checked = true;
        else radioVisible.Checked = true;
        dropDay.SelectedValue = studentCurrent.Brithday.Day.ToString();
        dropMonth.SelectedValue = studentCurrent.Brithday.Month.ToString();
        dropYear.SelectedValue = studentCurrent.Brithday.Year.ToString();
        if (studentCurrent.Sex == true)
            dropSex.SelectedIndex = 1;
        if (studentCurrent.Sex == false)
            dropSex.SelectedIndex = 2;
    }
    private void ShowChildDM(int parentId, string space)
    {
        List<Category> listDataSource = classData.GetByParent(parentId, true);

        foreach (Category item in listDataSource)
        {
            ListItem obj = new ListItem(space + item.Name, item.Id.ToString());
            dropParent.Items.Add(obj);
            ShowChildDM(item.Id, space + "- - - ");
        }
    }
    private void LoadComboBrith()
    {
        ListItem itemDay = new ListItem("Ngày", "0");
        dropDay.Items.Insert(0, itemDay);
        ListItem itemMon = new ListItem("Tháng", "0");
        dropMonth.Items.Insert(0, itemMon);
        ListItem itemYear = new ListItem("Năm", "0");
        dropYear.Items.Insert(0, itemYear);
        for (int i = 1; i <= 31; i++)
        {
            ListItem obj = new ListItem(i.ToString(), i.ToString());
            dropDay.Items.Add(obj);
        }
        for (int i = 1; i <= 12; i++)
        {
            ListItem obj = new ListItem(i.ToString(), i.ToString());
            dropMonth.Items.Add(obj);
        }
        for (int i = DateTime.Now.Year; i >= 1930; i--)
        {
            ListItem obj = new ListItem(i.ToString(), i.ToString());
            dropYear.Items.Add(obj);
        }
    }

    private void ShowChildDS(int parentId, string space)
    {
        List<Class> listDataSource1 = classData.GetByParentClass(parentId);
        foreach (Class item in listDataSource1)
        {
            ListItem obj = new ListItem(space + item.Name, item.Id.ToString());
            dropClass.Items.Add(obj);
            ShowChildDS(item.Id, space + "- - - ");
        }
    }

    private void LoadCategory()
    {
        dropClass.Items.Clear();
        ListItem itemRoot = new ListItem("Danh sách lớp học", "0");
        dropClass.Items.Insert(0, itemRoot);

    }
    private void LoadCategory(int parentId)
    {
        dropClass.Items.Clear();

        ListItem itemRoot = new ListItem("Danh sách lớp học", "0");
        dropClass.Items.Insert(0, itemRoot);
        ShowChildDS(parentId, " - - ");
    }
    private void LoadCategoryDM()
    {
        dropParent.Items.Clear();
        ListItem itemRoot = new ListItem("Danh mục lớp học", "0");
        dropParent.Items.Insert(0, itemRoot);
        ShowChildDM(14, " - - ");

    }
    protected void dropParent_SelectedIndexChanged(object sender, EventArgs e)
    {
        int parentId = Convert.ToInt32(dropParent.SelectedValue);
        LoadCategory(parentId);
    }

    protected void radioBoAnh_CheckedChanged(object sender, EventArgs e)
    {
        if (radioBoAnh.Checked)
        {
            trFileUpload.Visible = false;
        }
        else
            trFileUpload.Visible = true;
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        if ((int)Session["Role"] != 1)
        {
            Myfunction.ThongBao(lbThongBao, "Bạn không có quyền thực hiện thao tác này ! ");
            return;
        }
        try
        {
            lbThongBao.Text = "";
            if (isValidate())
            {
                if (Request.QueryString["Id"] == null)
                {
                    Add();
                    ResetForm();
                    LoadCombo();
                }
                else
                {
                    Update();
                }
            }
        }
        catch (Exception ex)
        {
            Myfunction.ThongBao(lbThongBao, ex.Message);
        }
    }
    private void ResetForm()
    {
        txtAddress.Text = "";
        txtCMND.Text = "";
        txtFirstName.Text = "";
        txtLastName.Text = "";
        txtPhone.Text = "";
        dropSex.SelectedIndex = 0;
        //dropParent.SelectedIndex = 0;
        dropYear.SelectedIndex = 0;
        dropMonth.SelectedIndex = 0;
        dropDay.SelectedIndex = 0;
    }
    private bool isValidate()
    {
        if (txtAddress.Text == "")
        {
            Myfunction.ThongBao(lbThongBao, "Tên danh mục không được để trống !");
            return false;
        }
        if (txtCMND.Text == "")
        {
            Myfunction.ThongBao(lbThongBao, "Số CMND không được để trống !");
            return false;
        }
        if (txtFirstName.Text == "")
        {
            Myfunction.ThongBao(lbThongBao, "Tên không được để trống !");
            return false;
        }
        if (txtLastName.Text == "")
        {
            Myfunction.ThongBao(lbThongBao, "Họ và tên đệm không được để trống !");
            return false;
        }
        if (txtPhone.Text == "")
        {
            Myfunction.ThongBao(lbThongBao, "Số điện thoại không được để trống !");
            return false;
        }
        if (dropClass.SelectedValue == "0")
        {
            Myfunction.ThongBao(lbThongBao, "Chọn lớp học cần thêm học viên !");
            return false;
        }
        if (dropDay.SelectedValue == "0" || dropMonth.SelectedValue == "0" || dropYear.SelectedValue == "0")
        {
            Myfunction.ThongBao(lbThongBao, "Chọn ngày tháng năm sinh !");
            return false;
        }
        return true;
    }
    
    private void Add()
    {
        int idParent = Convert.ToInt32(dropClass.SelectedValue);
        Student student = new Student();

        student.Address = txtAddress.Text;
        student.CreateDate = DateTime.Now;
        student.isEnable = (radioEnable.Checked ? true : false);
        student.ClassId = idParent;
        student.Brithday = Convert.ToDateTime(dropMonth.SelectedValue + "/" + dropDay.SelectedValue + "/" + dropYear.SelectedValue);
        student.CMND = txtCMND.Text;
        student.FirstName = txtFirstName.Text;
        student.LastName = txtLastName.Text;
        student.Phone = txtPhone.Text;
        if (dropSex.SelectedIndex == 1)
            student.Sex = true;
        if (dropSex.SelectedIndex == 2)
            student.Sex = false;
        
        if (radioDeAnh.Checked)
        {
            if (fileUpload.HasFile)
            {
                student.Images = Myfunction.CopyFile(fileUpload.PostedFile, "Images/Student", student.LastName + student.FirstName);
            }
        }
        data.Add(student);
        Myfunction.ThongBao(lbThongBao, "Danh mục đã được cập nhật");
    }
    private void Update()
    {
        int idParent = Convert.ToInt32(dropClass.SelectedValue);
        int id = Convert.ToInt32(Request.QueryString["Id"]);
        Student student = new Student();
        Student studentCurrent = data.GetById(id);

        studentCurrent.Address = txtAddress.Text;
        studentCurrent.CreateDate = studentCurrent.CreateDate;
        studentCurrent.isEnable = (radioEnable.Checked ? true : false);
        studentCurrent.ClassId = idParent;
        studentCurrent.Brithday = Convert.ToDateTime(dropMonth.SelectedValue + "/" + dropDay.SelectedValue + "/" + dropYear.SelectedValue);
        studentCurrent.CMND = txtCMND.Text;
        studentCurrent.FirstName = txtFirstName.Text;
        studentCurrent.LastName = txtLastName.Text;
        studentCurrent.Phone = txtPhone.Text;
        if (dropSex.SelectedIndex == 1)
            studentCurrent.Sex = true;
        if (dropSex.SelectedIndex == 2)
            studentCurrent.Sex = false;

        studentCurrent.Images = studentCurrent.Images;
        if (radioDeAnh.Checked)
        {
            if (fileUpload.HasFile)
            {
                if (student.Images == null || student.Images == "")
                    studentCurrent.Images = Myfunction.CopyFile(fileUpload.PostedFile, "Images/Student", studentCurrent.LastName + studentCurrent.FirstName);
                else
                    studentCurrent.Images = Myfunction.UpdateFile(fileUpload.PostedFile, "Images/Category", studentCurrent.Images, studentCurrent.LastName + studentCurrent.FirstName);
            }
        }

        data.Update(studentCurrent);

        Myfunction.ThongBao(lbThongBao, "Danh mục đã được cập nhật");
    }
}